package GUI;

import Domein.SpelerDeelname;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.*;
import layout.TableLayout;

/**
 *
 * @author Tim
 */
public class Tafel {
    /**
     *
     */
    public Controller gc;
    /**
     *
     */
    public Controllers.Tafel ct;

    public JButton inzetButton, kaartButton, doubleButton, pasButton, splitButton, verzekerenButton;
    /**
     *
     */
    public JTextField inzetText;
    /**
     *
     */
    public boolean showBankCard = false;
    private Domein.Server server;

    double b = 10; // Border
    double f = TableLayout.FILL; // Fill
    double p = TableLayout.PREFERRED; //Preferred
    double vs = 5;// Vertical space between labels and text fields
    double vg = 10; // Vertical gap between form elements
    double hg = 10; // Horizontal gap between form elements
    double kw = (Kaart.cardWidth+20);
    double kh = (Kaart.cardHeight+20);

    boolean showKaarten = false;

    /**
     *
     * @param gc
     */
    public Tafel(Controller gc) {
        this.gc = gc;
    }

    public void showKaarten() {
        this.showKaarten = true;
    }

    public void hideKaarten() {
        this.showKaarten = false;
    }

    /**
     *
     */
    public void createGUI() {
        ct = new Controllers.Tafel(this);
        gc.changeTitle("Black Jack Tafel - speler"+gc.spelerNr);
        gc.deelname = (SpelerDeelname)gc.spel.ronden.get(gc.spel.ronden.size()-1).deelname.get(gc.spelerNr);

        double size[][] = {
           //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14
            {b,10,kw,50,kw,50,kw,50,kw,50,kw, f}, // Cols
            {b,kh, p, p, p,kh, b, p, p, f} // Rows
        };

        gc.setLayout(new TableLayout(size));

        Kaart[] kArray = new Kaart[50];
        int kaartnr = 0;
        int bounds;

        JPanel[][] spelerHand = new JPanel[4][6];
        JLabel[][] spelerinfo = new JLabel[4][6];
        
        // Spelersinformatie tonen!!
        for(int s =0; s<=gc.ronde.deelname.size()-2;s++){
        int index = s+1;
        SpelerDeelname speler = (SpelerDeelname) gc.ronde.deelname.get(index);

        spelerHand[s][0] = new JPanel();
        spelerHand[s][0].setLayout(null);
        for(Domein.Kaart k: speler.handen.get(0).kaarten){
            kArray[kaartnr] = new Kaart(k.getSuit(), k.getValue());
            spelerHand[s][0].add(kArray[kaartnr]);
            kaartnr++;
        }
        
        bounds = (10*speler.handen.get(0).kaarten.size())-10;
            kaartnr -= speler.handen.get(0).kaarten.size();
        for(Domein.Kaart k: speler.handen.get(0).kaarten){
            kArray[kaartnr].setBounds(bounds, bounds, Kaart.cardWidth, Kaart.cardHeight);
            bounds -= 10;
            kaartnr++;
        }
        spelerHand[s][1] = new JPanel();
        spelerHand[s][1].setLayout(new GridLayout(5,1));
        spelerinfo[s][0] = new JLabel(speler.getGebruikersnaam());
        String isVerzekerd = (speler.handen.get(0).verzekerd)? "(Verzekerd)" : "";
        spelerinfo[s][1] = new JLabel("inzet: "+speler.handen.get(0).inzet+isVerzekerd);
        spelerinfo[s][2] = new JLabel("Saldo: "+speler.huidigeSaldo);
        spelerinfo[s][3] = new JLabel("Ratio: "+speler.speler.getRation());
        spelerinfo[s][4] = new JLabel(""+speler.handen.get(0).getKaarten());

        spelerHand[s][1].add(spelerinfo[s][0]);
        spelerHand[s][1].add(spelerinfo[s][1]);
        spelerHand[s][1].add(spelerinfo[s][2]); 
        spelerHand[s][1].add(spelerinfo[s][3]);
        spelerHand[s][1].add(spelerinfo[s][4]);

        if(speler.handen.get(0).inzet<1){
            spelerinfo[s][4].setText("");
            spelerHand[s][0].removeAll();
        }
        if(!showKaarten){
            spelerHand[s][0].removeAll();
            spelerinfo[s][4].setText("");
        }
        }
        
        
        // Hand van de bank
        if(!gc.ronde.deelname.get(0).handen.isEmpty()){
        JPanel bankHand = new JPanel();
        bankHand.setLayout(null);
        int i = 1;
        for(Domein.Kaart k: gc.ronde.deelname.get(0).handen.get(0).kaarten){
            if(i == 2) {
                kArray[kaartnr] = new Kaart(k.getSuit(), k.getValue(), showBankCard);
            } else {
                kArray[kaartnr] = new Kaart(k.getSuit(), k.getValue());
            }
            bankHand.add(kArray[kaartnr]);
            kaartnr++;
            i++;
        }
        bounds = (10*gc.ronde.deelname.get(0).handen.get(0).kaarten.size())-10;
        kaartnr -= gc.ronde.deelname.get(0).handen.get(0).kaarten.size();
        for(Domein.Kaart k: gc.ronde.deelname.get(0).handen.get(0).kaarten){
            kArray[kaartnr].setBounds(bounds, bounds, Kaart.cardWidth, Kaart.cardHeight);
            bounds -= 10;
            kaartnr++;
        }

        // De informatie van de kaarten van de Bank
        JPanel bankInfo = new JPanel();
        bankInfo.setLayout(new GridLayout(4,1));
        JLabel bankLabel = new JLabel("Bank");
        JLabel saldoBankLabel = new JLabel("");
        JLabel ratioBankLabel = new JLabel("");
        JLabel waardeBankLabel = new JLabel(""+gc.ronde.deelname.get(0).handen.get(0).getKaarten());
        bankInfo.add(bankLabel); bankInfo.add(waardeBankLabel);
        
        if(bankHand != null){
        gc.add(bankHand, "6, 1");
        gc.add(bankInfo, "6, 2");
        }
        }

        // Gebruikers panel voor de gegevens van de gebruiker
        JPanel userPanel = new JPanel();
        userPanel.setLayout(new GridLayout(4,1));
        JLabel inzetLabel = new JLabel("Inzet: "+gc.deelname.handen.get(0).inzet);
        JLabel saldoLabel = new JLabel("Saldo: "+gc.deelname.huidigeSaldo);
        JLabel winstLabel = new JLabel("Winst/Totaal: 5/10 ");
        JLabel beurtLabel = new JLabel("Ronde: "+gc.spel.ronden.size());
        userPanel.add(inzetLabel);
        userPanel.add(saldoLabel);
        userPanel.add(winstLabel);
        userPanel.add(beurtLabel);
        
        // Button panel voor de gebruiker
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
        inzetButton = new JButton("Inzetten");
        kaartButton = new JButton("Kaart");
        doubleButton = new JButton("Double");
        pasButton = new JButton("Passen");
        splitButton = new JButton("Splitsen");
        verzekerenButton = new JButton("Verzekeren");

        inzetButton.addActionListener(ct);
        kaartButton.addActionListener(ct);
        doubleButton.addActionListener(ct);
        pasButton.addActionListener(ct);
        splitButton.addActionListener(ct);
        verzekerenButton.addActionListener(ct);

        buttonPanel.add(inzetButton);
        buttonPanel.add(kaartButton);
        buttonPanel.add(doubleButton);
        buttonPanel.add(pasButton);
        //buttonPanel.add(splitButton);
        buttonPanel.add(verzekerenButton);

        inzetButton.setEnabled(false);
        kaartButton.setEnabled(false);
        doubleButton.setEnabled(false);
        pasButton.setEnabled(false);
        splitButton.setEnabled(false);
        verzekerenButton.setEnabled(false);


        // Inzet TextField
        JPanel inzetPanel = new JPanel();
        inzetText = new JTextField(30);
        inzetPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
        inzetPanel.add(inzetText);
        inzetText.setEnabled(false);

        if(spelerHand[0][1] != null){
            gc.add(spelerHand[0][1], "2, 3");
            gc.add(spelerHand[0][0], "2, 4, 2, 5");
        }
        if(spelerHand[1][1] != null){
            gc.add(spelerHand[1][1], "4, 4");
            gc.add(spelerHand[1][0], "4, 5");
        }
        if(spelerHand[2][1] != null){
            gc.add(spelerHand[2][1], "8, 4");
            gc.add(spelerHand[2][0], "8, 5");
        }
        if(spelerHand[3][1] != null){
            gc.add(spelerHand[3][1], "10, 3");
            gc.add(spelerHand[3][0], "10, 4, 8, 5");
        }


        gc.add(userPanel, "1, 7, 3, 8");
        gc.add(inzetPanel, "4, 7, 10, 7");
        gc.add(buttonPanel, "4, 8, 10, 8");

        //Afhandelen van de activatie van de buttons
        //gc.deelname.aanDeBeurt(this);
        Color c;
        for(int i=0;i<5;i++){
            if(gc.deelname.handen.get(0).activeHand){
                c = Color.BLUE;
            }
            else{
                c = Color.RED;
            }
            spelerinfo[gc.spelerNr-1][i].setForeground(c);
        }
    }
}
